<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" xml:lang="zh" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Guideline: 用例研讨会</title>
<meta name="uma.type" content="Guideline">
<meta name="uma.name" content="use-case_workshop">
<meta name="uma.presentationName" content="用例研讨会">
<meta name="element_type" content="other">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../../css/default.css" type="text/css">
<script src="./../../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="8.18300315488657E-305"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Guideline: 用例研讨会</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../../images/guidance.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">本指南描述如何准备和进行用例研讨会。</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Related Elements</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../rup/tasks/find_actors_and_use_cases_1ACB35F0.html" guid="{3CD5FA7E-160C-4A39-9DEB-C6D162D8AECD}">查找参与者和用例</a>
</li>
<li>
<a href="./../../../rup/domains/requirements_58267518.html" guid="_KVkLoN7HEdm8G6yT7-Wdqw">需求</a>
</li>
<li>
<a href="./../../../rup/tasks/elicit_stakeholder_requests_97BE5D6E.html" guid="{EAEF65F0-E9CA-45B2-A875-47E66B3FDBC6}">引发项目干系人请求</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><a id="Top" name="Top"></a> 
<h3>
    <a id="Organization of the Workshop" name="Organization of the Workshop">研讨会的组织</a>
</h3>
<p>
    用例研讨会是有一种组织的<a class="elementLinkWithUserText" href="./../../../rup/guidances/guidelines/brainstorming_and_idea_reduction_73112962.html" guid="1.2379282201043798E-305">集思广益</a>的会议。需要用到广泛的知识：
</p>
<ul>
    <li>
        客户需求
    </li>
    <li>
        系统设计
    </li>
    <li>
        单元设计
    </li>
    <li>
        Neusoft Unified Process
    </li>
    <li>
        测试
    </li>
</ul>
<p>
    这意味着小组将包含具有不同背景、知识和经验的人。尝试使组保持小规模（少于十人）。通常，编组时使组的一半成员来自开发团队，另一半成员来自用户代表。中间则是协调人。协调人应该充当主持人的角色，即促使大家说出所有想法和期望。
</p>
<h3>
    <a id="Tools" name="Tools">工具</a>
</h3>
<p>
    需要的工具为：
</p>
<ul>
    <li>
        两块大白板（一块就足够了，但是有两块更好）
    </li>
    <li>
        框架图
    </li>
    <li>
        磁带
    </li>
    <li>
        两种颜色的自粘性便笺
    </li>
    <li>
        白板笔（多种颜色）
    </li>
    <li>
        铅笔
    </li>
    <li>
        适于粘贴纸张的墙面，在可以使用两三个星期而不受打扰的“决策室”内。
    </li>
</ul>
<h3>
    <a id="Defining Actors" name="Defining Actors">定义参与者</a>
</h3>
<p>
    尝试确定系统的使用者。从系统的实际使用人员入手；由于侧重于具体的、而不是抽象的内容，所以大多数人较为轻松。在确定了用户之后，尝试确定用户在与系统进行交互时所扮演的角色，通常，对于<a class="elementLink" href="./../../../rup/workproducts/rup_actor_1F9CE9.html" guid="{0EEBBA43-F5C6-4594-9F06-65D99F7556DF}">参与者</a>而言这是一个好名称。
</p>
<p>
    在确定参与者时，请确保为每个参与者写下一个简短描述；它通常是一些描述参与者在系统中所扮演的角色以及参与者职责的要点，这些要点将在稍后确定参与者在系统中的需求时会有所帮助。
</p>
<p>
    在定义参与者时，请不要忘记与该系统交互的其他系统。此处的参与者图标会导致误解 － 看起来它暗示参与者是“人”，但参与者的概念还包含系统。
    但首先还是要关注作为“人”的参与者；大多数小组在先关注熟悉的事物时会做得更好，其次才会考虑更深奥的事物。
</p>
<p>
    请不要担心<a class="elementLink" href="./../../../rup/workproducts/rup_usecase_model_EF15E534.html" guid="{9C66F2EC-EDEB-4369-9AFB-04B9E7CBCB8E}">用例模型</a>的结构或参与者之间的关系；只需找到系统的使用者。侧重于确定工作，并作好查找大量参与者的准备。不要过多考虑现在就进行列表过滤操作；确定<a class="elementLinkWithUserText" href="./../../../rup/workproducts/rup_usecase_A5D30E62.html" guid="{B1526BC5-E346-42CB-A08A-3C0D7F382407}">用例</a>（参见下文）将进行此操作。
</p>
<h3>
    <a id="An Administrative System" name="An Administrative System">管理系统</a>
</h3>
<p>
    提出问题：组织中的哪些角色将使用该系统？为建议的每个角色画一个示意小人，并在该图形下写下一个名称。然后，在白板上列出两列参与者，在示意云朵或已画出图标的两边各列一列。 有时候，使用词语“角色”或“用户”而不是“参与者”会很有用。
</p>
<p>
    要提出的问题：
</p>
<ul>
    <li>
        谁将使用此系统？
    </li>
    <li>
        此系统要将信息发送到其他哪些系统？
    </li>
    <li>
        我们将从其他哪些系统接收信息？
    </li>
    <li>
        谁启动系统？
    </li>
    <li>
        谁将维护用户信息？
    </li>
</ul>
<p align="center">
    <img height="330" alt="附带文本中描述的图。" src="./../../../rup/guidances/guidelines/resources/wg_ucws1.gif" width="413" />
</p>
<h3>
    <a id="Instance or Class?" name="Instance or Class?">实例或类</a>
</h3>
<p>
    您可以提出类似这样的问题：“为何 Tom 不是参与者？总是 Tom 来做这件事情的。”此时，需要提出更多问题来了解 Tom 的角色是什么。参与者的名称应该反映其角色。
</p>
<ul>
    <li>
        Tom 的角色是什么？
    </li>
    <li>
        其他什么人也能够执行该角色？
    </li>
    <li>
        为何 Tom 具有该角色？
    </li>
</ul>
<p>
    可以通过多个参与者在组织中的常规位置来直接确定他们。组织中的一个位置可以与系统中的多个角色相对应。例如，Tom 可以是一个常规的仓库工作者，同时也是负责重新安排仓库来为新产品腾出空间的人员。这两种职责对于系统而言可以是两种不同的参与者。
</p>
<p>
    某些人会想要进行极端的泛化。他们可能建议将“用户”作为参与者，然后建议这就是我们需要的唯一参与者。这没错，但没有意义，并且无助于理解系统。如果有人提出这种建议，尽量避免讨论该提议。将“用户”参与者记录在白板上，然后继续讨论下一个参与者。
</p>
<h3>
    <a id="Tricks of the Trade" name="Tricks of the Trade">沟通技巧</a>
</h3>
<ul>
    <li>
        询问所有人是否有任何遗漏。
    </li>
    <li>
        鼓励您提出并不完美的建议。这样，团队就可以纠正您的理解，并解释系统的确切角色。
    </li>
    <li>
        始终接受所有建议 － 您以后可以删除重复建议和无参与者的建议。批评某人的建议将会扼杀会议精神。
    </li>
</ul>
<p>
    定义参与者通常会花费 1 至 4 个小时。此时白板应该列出了许多参与者，但请确保仍然有添加用例的地方。当确定参与者之后，就可以开始确定用例。
</p>
<p align="center">
    <img height="260" alt="附带文本中描述的图。" src="./../../../rup/guidances/guidelines/resources/wg_ucws2.gif" width="413" />
</p>
<h3>
    <a id="Define Use Cases" name="Define Use Cases">定义用例</a>
</h3>
<p>
    擦除白板上的云朵或图标，并开始确定<a class="elementLinkWithUserText" href="./../../../rup/workproducts/rup_usecase_A5D30E62.html" guid="{B1526BC5-E346-42CB-A08A-3C0D7F382407}">用例</a>。将重点放在具体用例上，避免有关<a class="elementLinkWithUserText" href="./../../../rup/guidances/guidelines/include-relationship_5AE2718.html" guid="7.259881398615376E-305">包含</a>和<a class="elementLinkWithUserText" href="./../../../rup/guidances/guidelines/extend-relationship_EF38D814.html" guid="3.679940320411645E-305">扩展</a>关系的讨论。画一个椭圆并写下每个建议的名称。画出指向<a class="elementLinkWithUserText" href="./../../../rup/workproducts/rup_actor_1F9CE9.html" guid="{0EEBBA43-F5C6-4594-9F06-65D99F7556DF}">参与者</a>的箭头。
</p>
<p>
    您对它们的应用一无所知其实是一件好事。研讨会的参与者需要告诉您系统应该做什么。您应提出许多关于系统的问题。当参与者对您作出解释时，就会出现用例。
</p>
<p>
    某些人能够立即理解用例的概念，而某些人不能。要从更容易的角度来理解此概念，可以让某人画出一个系统视图。系统视图是系统的抽象。例如，它可以是一个带有数据库的服务器和若干个客户机，或者是若干个标出了特殊任务的电路板。通常，该视图很容易说明：通常参与者中的某个人会使用白板笔来说明系统如何工作。系统视图有助于用例从系统边界扩展到系统边界，并且隐含地指向许多不同的系统状态。就这些状态提出问题，此时会出现更多用例。检查不同通信中断时将发生的情况，这有助于确定用例中的备选流。
</p>
<p>
    如果使用技术系统，则由于通常每个人都很了解系统视图，所以系统视图可能是查找参与者的最佳方法。在这种情况下，您可以在查找参与者之前让他们画出系统视图。
</p>
<p>
    如果您使用是管理系统，系统视图可能不是对每个人而言都同样明晰。在这种情况下，描述人员日常工作的图可能更有用。该图可以描述一个业务实体是如何从一个人转移到另一个人，以及他们将如何使用业务实体。为了使订购和交付的流程形象化，该图可以显示客户办公室、我们的办公室、存储仓库和客户存储仓库的示意图。
</p>
<p>
    确保用例模型和系统视图／业务实体视图对每个人而言都清晰可见。这时，可能会用到两块白板。
</p>
<p>
    允许用例使用长名称。最近确定的用例可以使用象句子一样长的名称（这有助于对用例进行简要描述），以后再缩短该名称。
</p>
<p>
    始终会有很多用例具有共同的部件。确保每个人都理解这在现在是可以接受的。暂时还没有必要进行构建，因为我们对用例的内容还不够了解。您应该等到概括出事件流之后再进行任何有关用例关系的讨论。
</p>
<p>
    当全组都一致认为白板上的用例已经涵盖了整个系统的功能时，可以中断研讨会去吃午餐。
</p>
<p>
    吃完午餐回来再继续，回顾早上会话的结果：
</p>
<ul>
    <li>
        查看每个<a class="elementLink" href="./../../../rup/workproducts/rup_actor_1F9CE9.html" guid="{0EEBBA43-F5C6-4594-9F06-65D99F7556DF}">参与者</a>：他／她在系统中的任务是什么？对于不熟悉用例建模技术的人来说，“任务”这个词比“用例”更好。
    </li>
    <li>
        查看每个建议的<a class="elementLink" href="./../../../rup/workproducts/rup_usecase_A5D30E62.html" guid="{B1526BC5-E346-42CB-A08A-3C0D7F382407}">用例</a>：您理解用户将通过用例实现的价值吗？如果用例具有积极的结果，则用户会更乐意执行用例。
    </li>
    <li>
        查看每个建议的用例：用例是否完整？或者它只是某个较大的用例中的一小部分？
    </li>
</ul>
<p>
    要提出的问题：
</p>
<ul>
    <li>
        每个参与者至少应该有一个用例。如果不是这样，则可能是因为存在重复的参与者（另一个参与者扮演了相同的角色），或者是因为参与者确实不是系统的直接用户。在这些情况下，如果有关保留参与者的价值的讨论不能得出强有力的保留参与者的理由，就可以除去该参与者。
    </li>
</ul>
<h3>
    <a id="Write Brief Description for each Use Case" name="Write Brief Description for each Use Case">写出每个用例的简要描述</a>
</h3>
<p>
    一个接一个地处理用例，并为每个用例创建框架图。画出一个椭圆并在图表的顶部写下用例名称。要求该组成员帮助您用铅笔写出用例的简要描述。简要描述应该是 1 至 3
    个句子。有时，画出与用例相连的参与者很有用。尽量在纸上留出一半空白的地方，以在下一个步骤中使用。
</p>
<p align="center">
    <img height="219" alt="附带文本中描述的图。" src="./../../../rup/guidances/guidelines/resources/wg_ucws3.gif" width="312" />
</p>
<p>
    在执行此工作期间，您将发现有些东西大家以为很清楚，而实际上却并不清楚。请参阅<a class="elementLink" href="./../../../rup/workproducts/rup_vision_2D6D6F1.html" guid="{417F089F-6636-451A-A8AB-AB4EAC7AC4F1}">愿景</a>中确定为<a class="elementLinkWithUserText" href="./../../../rup/guidances/concepts/types_of_requirements_528C097C.html" guid="5.360970653483052E-305">关键的用户需要和功能</a>的需求，并设法查找是否有关于此用例的任何<a class="elementLink" href="./../../../rup/guidances/concepts/requirements_62E28784.html" guid="4.582668643506599E-305">需求</a>。
</p>
<p>
    此时将出现新用例。而某些用例会消失。将写有用例的纸挂在墙上。安排用例时应该尽量为每类功能安排一列。（请不要使用白板来进行此工作，记录系统视图、参与者和用例需要白板。）如果您不能立即解决问题，将它们写在自粘性便笺上并放在相应的用例上。问题用同一种颜色标出。
</p>
<p>
    当所有用例都有框架图和简要描述之后，就该开始下一个方式了。通常，明智的做法是花时间讨论一下，是否真的已包括所有所需用例。
</p>
<p>
    到目前为止您所创建的模型可能都记录在 <a class="elementLink" href="./../../../rup/tools/rup_rose_classic_20F2524D.html" guid="{06FB737B-5D74-4C3B-98F4-36153CFB2E34}">Rational Rose</a> 或 <a class="elementLink" href="./../../../rup/tools/rup_requisite_pro_593FD397.html" guid="{887DBA0C-5761-494D-862D-5956F1C51BF7}">Rational RequisitePro</a> 中并生成用例模型调查报告。
</p>
<h3>
    <a id="Step-by-Step Description of the Flow of Events for each Use Case" name="Step-by-Step Description of the Flow of Events for each Use Case">每个用例的事件流的分步描述</a>
</h3>
<p>
    开始编写用例的方法是首先组织文本的结构。如果事先没有向项目干系人征求意见和建议，不要独自编制文本。
</p>
<p>
    一个接一个地处理用例。按顺序写下不同的操作。不要探究它们在代码结构、循环、for-while 语句等中看起来将是怎样，只处理基本事件流，而不要考虑备用事件流。列举步骤 1、2、3 和
    4。为了帮助小组理解所需的详细程度，您也可以说明希望在基本流程有 5 至 10 个步骤。
</p>
<p>
    您同意基本事件流中的步骤后，进行走查，并确定备用步骤。列举备选流 A1、A2、A3 和 A4。
</p>
<p align="center">
    <img height="219" alt="附带文本中描述的图。" src="./../../../rup/guidances/guidelines/resources/wg_ucws4.gif" width="312" />
</p>
<p>
    在此讨论期间会提出许多问题，其中有许多问题只有在进行到<a class="elementLinkWithUserText" href="./../../../rup/capabilitypatterns/analysis_design_49725AC4.html" guid="{002674F9-6511-4D15-8623-B761D8C48986}">分析与设计</a>时才能解决。请记住：要记下所有的问题，以及此过程中需要作出的所有假设。有些问题需要尽快解决，这样，<a class="elementLink" href="./../../../rup/roles/rup_requirement_specifier_A2500152.html" guid="{7264A534-7509-4B4B-AF73-CAECC0178898}">需求指定者</a>才能正确地详细描述事件流，而有些问题则需要确保在开始“分析与设计”之前得到解决。
</p>
<p>
    此时在框架图中的内容应该已足以使得需求指定者能够详细描述用例事件流。
</p>
<h3>
    <a id="Capture Supplementary Specifications" name="Capture Supplementary Specifications">获取补充规约</a>
</h3>
<p>
    在此会话期间，将有若干个与系统有关而您可能无法在用例中轻易发现的<a class="elementLink" href="./../../../rup/guidances/concepts/requirements_62E28784.html" guid="4.582668643506599E-305">需求</a>。通常，这些陈述与系统的功能、可用性、可靠性、性能以及可支持性有关。保留一个单独的框架图，在其中记录这些陈述。它们将构成<a class="elementLink" href="./../../../rup/workproducts/rup_supplementary_specification_F5ACAA22.html" guid="{B16C2941-791C-44E6-B353-354109B5C9DE}">补充规约</a>的基础。
</p>
<h3>
    <a id="Trace Requirements to Use Cases" name="Trace Requirements to Use Cases">跟踪需求至用例</a>
</h3>
<p>
    走查关键的<a class="elementLink" href="./../../../rup/workproducts/rup_stakeholder_requests_A89D2BF9.html" guid="{75F38765-E25B-4459-907E-77F429652C0F}">项目干系人请求</a>和<a class="elementLinkWithUserText" href="./../../../rup/workproducts/rup_vision_2D6D6F1.html" guid="{417F089F-6636-451A-A8AB-AB4EAC7AC4F1}">愿景文档</a>中的每个功能，并验证用例模型是否以适当的方式涵盖了这些功能。讨论哪些用户需要或需求被<a class="elementLinkWithUserText" href="./../../../rup/guidances/concepts/traceability_8F6B898D.html" guid="1.4005695544042474E-306">跟踪</a>至哪些用例。
</p>
<p align="center">
    <img height="219" alt="附带文本中描述的图。" src="./../../../rup/guidances/guidelines/resources/wg_ucws5.gif" width="312" />
</p>
<p>
    取出<a class="elementLinkWithUserText" href="./../../../rup/workproducts/rup_vision_2D6D6F1.html" guid="{417F089F-6636-451A-A8AB-AB4EAC7AC4F1}">愿景文档</a>并阅读第一个<a class="elementLinkWithUserText" href="./../../../rup/guidances/concepts/types_of_requirements_528C097C.html" guid="5.360970653483052E-305">功能</a>。在一张（在需要时可用多张）自粘性便笺上记录其标识（使用另一种颜色，便于区分需求和问题）。将便笺放在满足该需求的用例上。稍后，您可以在 RequisitePro
    存储库中输入这些<a class="elementLinkWithUserText" href="./../../../rup/guidances/concepts/traceability_8F6B898D.html" guid="1.4005695544042474E-306">可跟踪性</a>。
</p>
<p>
    始终会有许多无法与任何用例连接的<a class="elementLink" href="./../../../rup/guidances/concepts/requirements_62E28784.html" guid="4.582668643506599E-305">需求</a>。
</p>
<ul>
    <li>
        它们可能是必须推迟到设计阶段的特定需求 － 将这些需求写在一张纸上（设计需求）。
    </li>
    <li>
        它们可能是无法与任何用例连接的一般需求 － 将它们写在<a class="elementLink" href="./../../../rup/workproducts/rup_supplementary_specification_F5ACAA22.html" guid="{B16C2941-791C-44E6-B353-354109B5C9DE}">补充规约</a>的列表中。
    </li>
    <li>
        它们可能是已被遗忘的需求，需要新的用例或者需要对现有用例进行变更。
    </li>
</ul>
<p>
    花一些时间来查看全部用例：是否存在没有任何需求的用例？为什么？不需要此用例吗？或者，写需求规约的人员忘记了此功能？（通常是这种情况。）必须解决这种情况。客户是否清楚他需要该功能？他是否愿意承担此项购买费用？
</p><br />
<br /></td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright">Copyright &copy; 2008 版权所有 东软集团股份有限公司&nbsp; 联系邮箱:<a href="mailto:tcoe@neusoft.com">tcoe@neusoft.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
